package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.AuthTreeGetButtonVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.AuthTreeButtonVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.AuthTreeMenuButtonCheckIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.AuthTreeMenuVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.*;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.MemberRoleGetButtonVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.PlatformMemberRoleGetVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.PlatformMemberRoleQueryVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 平台后台 - 会员自定义角色服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-06-30
 */
public interface IPlatformMemberRoleService {

    /**
     * 分页、模糊查询会员角色
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<PlatformMemberRoleQueryVO>> pageMemberRole(HttpHeaders headers, MemberRolePageVO pageVO);

    /**
     * 获取左侧权限菜单列表，以树形菜单形式返回
     * @param headers HttpHeaders信息
     * @return 操作结果
     */
    Wrapper<List<AuthTreeMenuVO>> treeMemberAuth(HttpHeaders headers);

    /**
     * 根据左侧菜单Id，查询右侧按钮列表
     * @param headers HttpHeaders信息
     * @param buttonVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<AuthTreeButtonVO>> getMemberAuthButtons(HttpHeaders headers, AuthTreeGetButtonVO buttonVO);

    /**
     * 查询右侧勾选的按钮Id列表
     * @param headers HttpHeaders信息
     * @param buttonVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberRoleGetButtonVO> getButtonCheckIds(HttpHeaders headers, MemberRoleButtonVO buttonVO);

    /**
     * 新增会员角色
     * @param headers Http头部信息
     * @param addVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> addMemberRole(HttpHeaders headers, PlatformMemberRoleAddVO addVO);

    /**
     * 查询单个会员角色的信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<PlatformMemberRoleGetVO> getMemberRole(HttpHeaders headers, MemberRoleIdVO idVO);

    /**
     * 查询左侧树形权限菜单中勾选的Id列表
     * @param headers HttpHeaders信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<AuthTreeMenuButtonCheckIdVO> getTreeCheckIds(HttpHeaders headers, MemberRoleIdVO idVO);

    /**
     * 更新会员角色及左侧菜单权限
     * @param headers Http头部信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberRole(HttpHeaders headers, PlatformMemberRoleUpdateVO updateVO);

    /**
     * 更新会员角色菜单关联按钮
     * @param headers HttpHeaders信息
     * @param upsertVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberRoleButton(HttpHeaders headers, MemberRoleUpdateButtonVO upsertVO);

    /**
     * 删除会员角色
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteMemberRole(HttpHeaders headers, MemberRoleIdVO idVO);

    /**
     * 更新会员角色状态
     * @param headers HttpHeaders信息
     * @param statusVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberRoleStatus(HttpHeaders headers, MemberRoleUpdateStatusVO statusVO);
}
